home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / tcclib.exe / SAY.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-01-31  |  1.2 KB  |  55 lines

  1. unsigned char far *CurrentPos( void );
  2. unsigned char far *ScrPtr( int x, int y );
  3. void RestoreCurPos( unsigned char far *s );
  4. void ScrollUp( int x, int y, int xx, int yy, int n );
  5. void Beep( void );
  6. void TcclibInitialize( void );
  7.  
  8. #define VIDMODE   *(unsigned char far *) 0x00449lu
  9. #define MONOSEG  0xb0000000L
  10. #define COLOR 0xb8000000L
  11. #define VIDSEG (unsigned char far *)((7 == VIDMODE) ? MONOSEG : COLOR )
  12.  
  13. #define BELL 7
  14. #define TAB  9
  15.  
  16. extern unsigned char attrib;
  17.  
  18. void Say( register char *cp )
  19. {
  20.     unsigned char far *scptr = CurrentPos();
  21.     unsigned char far *scend = ScrPtr( 80, 25 );
  22.  
  23.     TcclibInitialize();
  24.  
  25.     while (*cp) {
  26.         switch( *cp ) {
  27.             case '\n':
  28.                 scptr = (unsigned char far *) ((long) scptr + (long) 160 );
  29.             case '\r':
  30.                 scptr = (unsigned char far *)
  31.                     ( ( ( (long) scptr - (long) VIDSEG ) /
  32.                           (long) 160 ) * (long) 160 + (long) VIDSEG );
  33.                 cp++;
  34.                 break;
  35.             case BELL:
  36.                 Beep();
  37.                 cp++;
  38.                 break;
  39.             case TAB:
  40.                 scptr = (unsigned char far *) ( (long) scptr / 16 * 16 );
  41.                 cp++;
  42.                 break;
  43.             default:
  44.                 *scptr++ = *cp++;
  45.                 *scptr++ = attrib;
  46.                 break;
  47.         }
  48.         if ( scptr > scend ) {
  49.             ScrollUp( 1, 1, 80, 25, 1 );
  50.             scptr -= 160;
  51.         }
  52.     }
  53.     RestoreCurPos( scptr );
  54. }
  55.